package com.javatest;

import java.util.Scanner;

/**
 * @author LL
 * @project
 * 题目：控制台输入一个数，打印回型数据，例如，输入4，就是
 * 1  2  3  4
 * 12 13 14 5
 * 11 16 15 6
 * 10 9  8  7
 * 这种格式数据输出
 * @create 2021-01-12 22:46
 */
public class Subject24 {

    static int n;
    static int sum;    //矩阵数字总个数
    static int flag = 1;
    static int[][] pattern;

    /*
     * 打印图案功能，其中n为图案矩阵的行列数
     */
    static void printPattern(int layer) {

        // 上：赋值
        for (int i = layer; i < n - layer - 1; i++) {
            pattern[layer][i] = flag++;
            if (flag > sum)
                return;
        }

        // 右：赋值
        for (int i = layer; i < n - layer - 1; i++) {
            pattern[i][n - layer - 1] = flag++;
            if (flag > sum)
                return;
        }

        // 下：赋值
        for (int i = n - layer - 1; i > layer; i--) {
            pattern[n - layer - 1][i] = flag++;
            if (flag > sum)
                return;
        }

        // 左：赋值
        for (int i = n - layer - 1; i > layer; i--) {
            pattern[i][layer] = flag++;
            if (flag > sum)
                return;
        }
        printPattern(++layer);
    }

    public static void main(String[] args) {
        System.out.println("请输入矩阵的行列数：");
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        pattern = new int[n][n];

        //预处理奇偶数的不同
        if(n%2==0)
            sum=n*n;
        else{
            sum=n*n-1;
            pattern[(n-1)/2][(n-1)/2]=n*n;
        }

        printPattern(0); //递归

        // 输出图案
        for (int[] row : pattern) {
            for (int column : row) {
                System.out.print(column + "\t");
            }
            System.out.println();
        }
    }
}
